#include<bits/stdc++.h>
using namespace std;

int main() {
    int n; // 定义变量n，表示输入的数的个数
    scanf("%d", &n); // 读取n的值

    multiset<long long> a; // 定义一个多重集合a，用于存储输入的数
    long long ans = 0; // 定义变量ans，用于存储最终的结果

    // 读取n个数并插入到多重集合a中
    for (int i = 0; i < n; i++) {
        int t; // 定义临时变量t，用于存储当前输入的数
        scanf("%d", &t); // 读取t的值
        a.insert(t); // 将t插入到多重集合a中
    }

    // 进行n-1次合并操作
    for (int i = 0; i < n - 1; i++) {
        int sum = 0; // 定义变量sum，用于存储当前合并的两个数的和

        // 获取多重集合a中最小的两个数
        auto it1 = a.begin(); // it1指向集合中的第一个元素（最小的数）
        advance(it1, 1); // 将it1移动到第二个元素（第二小的数）
        auto it2 = it1; // it2指向第二个元素
        advance(it1, -1); // 将it1移回第一个元素

        // 将最小的两个数相加，并累加到ans中
        ans += *it1 + *it2; // 将当前合并的两个数的和累加到ans中
        sum += *it1 + *it2; // 计算当前合并的两个数的和

        // 从集合中删除这两个数
        a.erase(it1); // 删除第一个元素
        a.erase(it2); // 删除第二个元素

        // 将合并后的和插入到集合中
        a.insert(sum); // 将sum插入到集合中
    }

    // 输出最终的结果
    printf("%lld", ans); // 输出ans的值
    return 0; // 程序结束
}